package org.adream.account.dao;

import java.util.List;

import org.adream.account.entity.TagEntity;
import org.adream.account.entity.UserEntity;
import org.apache.ibatis.annotations.Param;

/**
 * user tag 关系维护
 * 
 * @author chenhaoyu
 *
 */
@BaseMybatisDao
public interface UserTagLinkDao {

	/**
	 * 根据uid tagid replace
	 * 
	 * @param uid
	 * @param tagId
	 */
	void replaceUserTag(@Param("uid") String uid, @Param("tagId") String tagId);

	/**
	 * 根据 uid tagid 删除对应条目
	 * 
	 * @param uid
	 * @param tagId
	 */
	void deleteUserTagLinkByUidAndTagId(@Param("uid") String uid, @Param("tagId") String tagId);

	/**
	 * 根据uid 删除所有对应条目
	 * 
	 * @param uid
	 */
	void deleteUserTagLinkByUid(@Param("uid") String uid);

	/**
	 * 根据tagid 删除所有对应条目
	 * 
	 * @param tagId
	 */
	void deleteUserTagLinkByTagId(@Param("tagId") String tagId);

	/**
	 * 根据uid查询 user所拥有的标签
	 * 
	 * @param uid
	 * @return
	 */
	List<TagEntity> queryTagByUid(@Param("uid") String uid);

	/**
	 * 根据tagid查询 所有有用此标签的用户
	 * 
	 * @param tagId
	 * @return
	 */
	List<UserEntity> queryUserByTagId(@Param("tagId") String tagId);

	/**
	 * 根据多个tagid查询 所有拥有这些标签的用户 (并集)
	 * 
	 * @param tagIds
	 * @return
	 */
	List<UserEntity> queryUserByTagIdsOR(@Param("tagIds") String tagIds);

	/**
	 * 根据多个tagid查询 同时拥有这些标签的用户 (交集)
	 * 
	 * @param tagIds
	 * @param tagnum
	 * @return
	 */
	List<UserEntity> queryUserByTagIdsAND(@Param("tagIds") String tagIds, @Param("tagnum") String tagnum);

}
